home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / magic / i / magiccoo.i < prev    next >
Encoding:
Modula Implementation  |  1997-10-26  |  5.3 KB  |  158 lines

  1. (*----------------------------------------------------------------------*
  2.  *                                                                      *
  3.  *         MAGIC   Modula's  All purpose  GEM  Interface  Cadre         *
  4.  *                 ÿ         ÿ            ÿ    ÿ          ÿ             *
  5.  *----------------------------------------------------------------------*
  6.  * Version 3.30  02.02.1992     (C)90/91/92 by Peter Hellinger Software *
  7.  *----------------------------------------------------------------------*
  8.  *            Dieses Modul ist urheberrechtlich geschtzt.              *
  9.  *                                                                      *
  10.  * Die Ver”ffentlichung des Quelltextes oder Teilen daraus in schrift-  *
  11.  * licher Form, insbesondere in Zeitschriften, sowie die Verbreitung    *
  12.  * ber Public-Domain-H„ndler bedarf der ausdrcklichen schriftlichen   *
  13.  * Genehmigung des Autors!                                              *
  14.  *                                                                      *
  15.  * Der Autor gibt hiermit die ausdrckliche Erlaubnis, das Modul jeder- *
  16.  * zeit auch im Quelltext weiterzugegeben, sofern dessen Text und ins-  *
  17.  * besondere dieser Urheberrechts-Vermerk nicht ver„ndert wird, und     *
  18.  * durch die Weitergabe kein finanzieller Nutzen entsteht. Der Autor    *
  19.  * beh„lt sich das Recht vor, diese Erlaubnis jederzeit u. ohne Angaben *
  20.  * von Grnden zu widerrufen.                                           *
  21.  *----------------------------------------------------------------------*)
  22.  
  23. IMPLEMENTATION MODULE MagicCookie;
  24.  
  25. (*----------------------------------------------------------------------*
  26.  * Int. Vers | Datum    | Name | Žnderung                               *
  27.  *-----------+----------+------+----------------------------------------*
  28.  *  3.00     | 18.01.92 |  Hp  |                                        *
  29.  *  3.01     | 29.01.92 |  Hp  | Routinen optimiert                     *
  30.  *-----------+----------+------+----------------------------------------*)
  31.  
  32.  
  33.  
  34. (* IMPLEMENTATION FšR  >>> Megamax-Modula-2 <<< *)
  35. (*                                              *)
  36. (*$R-   Range-Checks                            *)
  37. (*$S-   Stack-Check                             *)
  38. (*                                              *)
  39. (*----------------------------------------------*)
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46. FROM MagicSys   IMPORT  Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
  47.                         Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
  48.                         Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
  49.                         sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET,
  50.                         CastToChar, CastToByte, CastToByteset, CastToInt,
  51.                         CastToCard, CastToBitset, CastToWord, CastToLInt,
  52.                         CastToLCard, CastToLBitset, CastToLWord, CastToAddr,
  53.                         TosVersion, Accessory, Basepage, SysHeader, TosDate;
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60. IMPORT SYSTEM;
  61. IMPORT MagicDOS;
  62.  
  63. CONST MaxCookies = 1024; (* Mehr Cookies wird ja wohl keiner haben *)
  64.  
  65. TYPE tCookie =  RECORD
  66.                  id:  lCARDINAL;
  67.                  val: lWORD;
  68.                 END;
  69.  
  70. TYPE tJar =     POINTER TO ARRAY [0..MaxCookies] OF tCookie;
  71.  
  72. VAR  dummy:     RECORD
  73.                  CASE : BOOLEAN OF
  74.                   TRUE:  str: ARRAY [0..3] OF CHAR; (* Identifier *)|
  75.                   FALSE: lc:  lCARDINAL;|
  76.                  END;
  77.                 END;
  78.  
  79.  VAR Jar[05A0H]: tJar;  
  80.  
  81.  
  82.  
  83.  
  84. VAR stack: SYSTEM.ADDRESS;
  85.     NoJar: SYSTEM.ADDRESS;
  86.  
  87. PROCEDURE FindCookie (cookie: ARRAY OF CHAR; VAR value: lWORD): BOOLEAN;
  88. VAR p: tJar;
  89.     (*$Reg*)  c: sCARDINAL;
  90.     b: BOOLEAN;
  91. BEGIN
  92.  stack:= Null;  MagicDOS.Super (stack);  b:= FALSE;
  93.  IF Jar # NoJar THEN
  94.   FOR c:= 0 TO 3 DO  dummy.str[c]:= cookie[c];  END;
  95.   p:= Jar;  c:= 0;
  96.   WHILE (p^[c].id # 0) AND NOT b DO
  97.    IF p^[c].id = dummy.lc THEN
  98.     value:= p^[c].val;  b:= TRUE;
  99.    END;
  100.    INC (c);
  101.   END;
  102.  END;
  103.  MagicDOS.Super (stack);
  104.  RETURN b;
  105. END FindCookie;
  106.  
  107. PROCEDURE ModifyCookie (cookie: ARRAY OF CHAR; newvalue: lWORD): BOOLEAN;
  108. VAR p: tJar;
  109.     (*$Reg*)  c: sCARDINAL;
  110.     b: BOOLEAN;
  111. BEGIN
  112.  stack:= Null;  MagicDOS.Super (stack);  b:= FALSE;
  113.  IF Jar # NoJar THEN
  114.   FOR c:= 0 TO 3 DO  dummy.str[c]:= cookie[c];  END;
  115.   p:= Jar;  c:= 0;
  116.   WHILE (p^[c].id # 0) AND NOT b DO
  117.    IF p^[c].id = dummy.lc THEN
  118.     p^[c].val:= newvalue;  b:= TRUE;
  119.    END;
  120.    INC (c);
  121.   END;
  122.  END;
  123.  MagicDOS.Super (stack);
  124.  RETURN FALSE;
  125. END ModifyCookie;
  126.  
  127. VAR p: tJar;
  128.     cook: sCARDINAL;
  129.  
  130. PROCEDURE ListCookies (flag: Listmode; VAR id: ARRAY OF CHAR; VAR value: lWORD): BOOLEAN;
  131. VAR (*$Reg*)  c: sCARDINAL;  ok: BOOLEAN;
  132. BEGIN
  133.  id[0]:= 0C;  c:= 0;  value:= CastToLWord (c);  ok:= FALSE;
  134.  stack:= Null;  MagicDOS.Super (stack);
  135.  IF Jar # NoJar THEN
  136.   IF flag = first THEN  p:= Jar;  cook:= 0;  END;
  137.   IF p^[cook].id # 0 THEN
  138.    value:= p^[cook].val;  (* Den Cookie-Wert bertragen *)
  139.    dummy.lc:= p^[cook].id;  (* den Longcard in einen String wandeln *)
  140.    FOR c:= 0 TO 3 DO  id[c]:= dummy.str[c];  END;
  141.    IF HIGH (id) > 3 THEN id[4]:= 0C;  END; (* Fr Terminierung sorgen *)
  142.    INC (cook); (* N„chster Cookie *)
  143.    ok:= TRUE;
  144.   END;
  145.  END;
  146.  MagicDOS.Super (stack);
  147.  RETURN ok;
  148. END ListCookies;
  149.  
  150. BEGIN
  151.  cook:= 0;
  152.  
  153.  NoJar:= 0; 
  154.  
  155.  
  156. END MagicCookie.
  157.  
  158.